package com.cositas.dulces.lp.action.impl;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

import com.cositas.dulces.lp.ApplicationFacade;
import com.cositas.dulces.lp.action.Action;
import com.cositas.dulces.lp.model.ShoppingCart;
import com.google.appengine.api.datastore.EntityNotFoundException;

public class PlaceOrderAction implements Action {

	public void doAction(HttpServletRequest req, HttpServletResponse resp) throws IOException, EntityNotFoundException, ServletException {

		String fbid = req.getParameter("fbid");
		String email = req.getParameter("email");
		String phone = req.getParameter("phone");
		String address = req.getParameter("address");
		String date = req.getParameter("date");
		boolean valid = true;
		List<String> errors = new ArrayList<String>();
		if (StringUtils.isEmpty(email) && StringUtils.isEmpty(phone)) {
			// tiene que dejar un contacto
			valid = false;
			errors.add("Debe dejar algun email o telefono de contacto.");
		}
		if (StringUtils.isEmpty(address)) {
			// tiene que dejar la dir de entrega
			valid = false;
			errors.add("Debe completar la direccion de entrega.");
		}
		if(StringUtils.isEmpty(date)) {
			// tiene que dejar la fecha
			valid = false;
			errors.add("Debe completar la fecha de entrega.");
		}
		if (!valid) {
			req.setAttribute("errors", errors);
			req.getRequestDispatcher("./checkout.jsp").forward(req, resp);
		} else {
				ShoppingCart sc = ApplicationFacade.getOpenShoppingCart(fbid);
				if (sc.products == null || sc.products.length == 0) {
					errors.add("El carrito esta vacio.");
					req.setAttribute("errors", errors);
					req.getRequestDispatcher("./checkout.jsp").forward(req, resp);
				} else { 
					// TODO validaciones y manejo de errores
					sc = ApplicationFacade.placeOrder(fbid, email, phone, address, new Date());
					req.setAttribute("sc", sc);
					req.getRequestDispatcher("./orderplaced.jsp").forward(req, resp);
				}
		}
	}
}
